if (window.PrimeFaces) {
    /** Farsi */
    PrimeFaces.locales['fa'] = {
        "accept": "بله",
        "reject": "خیر",
        "choose": "انتخاب",
        "upload": "بارگذاری",
        "cancel": "لغو",
        "dayNames": ["یکشنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"],
        "dayNamesShort": ["ی", "د", "س", "چ", "پ", "ج", "ش"],
        "dayNamesMin": ["ی", "د", "س", "چ", "پ", "ج", "ش"],
        "monthNames": [
            "ژانویه",
            "فوریه",
            "مارس",
            "آوریل",
            "مه",
            "ژوئن",
            "ژوئیه",
            "اوت",
            "سپتامبر",
            "اکتبر",
            "نوامبر",
            "دسامبر"
        ],
        "monthNamesShort": [
            "ژانویه",
            "فوریه",
            "مارس",
            "آوریل",
            "مه",
            "ژوئن",
            "ژوئیه",
            "اوت",
            "سپتامبر",
            "اکتبر",
            "نوامبر",
            "دسامبر"
        ],
        "today": "امروز",
        "clear": "پاک کردن",
        "weekHeader": "هفته",
        "firstDayOfWeek": 6,
        "showMonthAfterYear": true,
        "dateFormat": "yyyy/mm/dd",
        "weak": "هفته",
        "medium": "متوسط",
        "strong": "قوی",
        "passwordPrompt": "یک گذرواژه وارد کنید",
        "startsWith": "شروع با",
        "contains": "حاوی",
        "notContains": "Not contains",
        "endsWith": "پایان با",
        "equals": "برابر",
        "notEquals": "نا برابر",
        "noFilter": "بدون فیلتر",
        "filter": "فیلتر",
        "lt": "کمتر از",
        "lte": "برابر یا کمتر از",
        "gt": "بیشتر از",
        "gte": "برابر یا بیشتر از",
        "dateIs": "Date is",
        "dateIsNot": "Date is not",
        "dateBefore": "Date is before",
        "dateAfter": "Date is after",
        "custom": "سفارشی",
        "apply": "Apply",
        "matchAll": "مطابقت با همه",
        "matchAny": "مطابقت با هر",
        "addRule": "افزودن قانون",
        "removeRule": "حذف قانون",
        "completed": "تکمیل شد",
        "pending": "در انتظار",
        "chooseYear": "انتخاب تاریخ",
        "chooseMonth": "انتخاب ماه",
        "chooseDate": "انتخاب تاریخ",
        "prevDecade": "دهه قبل",
        "nextDecade": "دهه بعد",
        "prevYear": "سال قبل",
        "nextYear": "سال بعد",
        "prevMonth": "ماه قبل",
        "nextMonth": "ماه بعد",
        "prevHour": "ساعت قبل",
        "nextHour": "ساعت بعد",
        "prevMinute": "دقیقه قبل",
        "nextMinute": "دقیقه بعد",
        "prevSecond": "ثانیه قبل",
        "nextSecond": "ثانیه بعد",
        "am": "قبل از ظهر",
        "pm": "بعد از ظهر",
        "emptyFilterMessage": "نتیجه ای پیدا نشد",
        "searchMessage": "{0} نتیجه در دسترس است",
        "selectionMessage": "{0} موارد انتخاب شده",
        "emptySelectionMessage": "موردی انتخاب نشده",
        "emptySearchMessage": "نتیجه ای پیدا نشد",
        "emptyMessage": "هیچ گزینه ای در دسترس نیست",
        "aria": {
            "trueLabel": "صحیح",
            "falseLabel": "غلط",
            "nullLabel": "انتخاب نشده",
            "star": "ستاره",
            "stars": "{star} ستاره",
            "selectAll": "همه موارد انتخاب شدند",
            "unselectAll": "همه موارد لغو انتخاب شدند",
            "close": "بستن",
            "previous": "قبلی",
            "next": "بعدی",
            "navigation": "Navigation",
            "scrollTop": "Scroll Top",
            "moveTop": "حرکت بالا",
            "moveUp": "حرکت بالا",
            "moveDown": "حرکت پایین",
            "moveBottom": "حرکت پایین",
            "moveToTarget": "حرکت تا هدف",
            "moveToSource": "حرکت تا منبع",
            "moveAllToTarget": "حرکت همه تا هدف",
            "moveAllToSource": "حرکت همه تا منبع",
            "pageLabel": "{page}",
            "firstPageLabel": "اولین صفحه",
            "lastPageLabel": "آخرین صفحه",
            "nextPageLabel": "صفحه بعد",
            "previousPageLabel": "صفحه قبل",
            "rowsPerPageLabel": "ردیف در هر صفحه",
            "jumpToPageDropdownLabel": "پرش به دراپ داون صفحه",
            "jumpToPageInputLabel": "Jump to Page Input",
            "selectRow": "ردیف انتخاب شده",
            "unselectRow": "ردیف لغو انتخاب شد",
            "expandRow": "ردیف گسترش پیدا کرده",
            "collapseRow": "ردیف جمع شد",
            "showFilterMenu": "نمایش فیلتر ها",
            "hideFilterMenu": "پنهان کردن فیلتر ها",
            "filterOperator": "عملگر فیلتر",
            "filterConstraint": "محدودیت فیلتر",
            "editRow": "ویرایش ردیف",
            "saveEdit": "ذخیره ویرایش",
            "cancelEdit": "لغو ویرایش",
            "listView": "نمایش به صورت لیست",
            "gridView": "نمایش به صورت شبکه",
            "slide": "اسلاید",
            "slideNumber": "{slideNumber}",
            "zoomImage": "بزرگنمایی تصویر",
            "zoomIn": "بزرگنمایی",
            "zoomOut": "کوچک نمایی",
            "rotateRight": "چرخش به سمت راست",
            "rotateLeft": "چرخش به سمت چپ"
        }
    };

    // custom PF labels
    PrimeFaces.locales['fa'] = $.extend(true, {}, PrimeFaces.locales['fa'], {
        weekNumberTitle: 'ه',
        isRTL: true,
        yearSuffix: '',
        timeOnlyTitle: 'فقط زمان',
        timeText: 'زمان',
        hourText: 'ساعت',
        minuteText: 'دقیقه',
        secondText: 'ثانیه',
        millisecondText: 'میلی ثانیه',
        year: 'سال',
        month: 'ماه',
        week: 'هفته',
        day: 'روز',
        allDayText: 'تمام روز',
        moreLinkText: 'بیشتر...',
        noEventsText: 'رویدادی وجود ندارد',
        aria: {
            'datatable.sort.ASC': 'جهت مرتب سازی صعودی ستون فعال کنید',
            'datatable.sort.DESC': 'جهت مرتب سازی نزولی ستون فعال کنید',
            'datatable.sort.NONE': 'جهت حذف مرتب سازی ستون فعال کنید',
            'colorpicker.OPEN': 'فتح أداة انتقاء اللون',
            'colorpicker.CLOSE': 'اغلاق أداة انتقاء اللون',
            'colorpicker.CLEAR': 'إزالة اللون المحدد',
            'colorpicker.MARKER': 'تشبّع: {s}. السطوع: {v}.',
            'colorpicker.HUESLIDER': 'شريط تمرير درجة اللون',
            'colorpicker.ALPHASLIDER': 'شريط تمرير التعتيم',
            'colorpicker.INPUT': 'حقل إدخال اللون',
            'colorpicker.FORMAT': 'تنسيق اللون',
            'colorpicker.SWATCH': 'عينة اللون',
            'colorpicker.INSTRUCTION': 'شريط التشبّع والسطوع. للتحكم استخدم أزرار الأسهم أعلى، أسفل، يمين، يسار .',
            'switch.ON': 'روشن',
            'switch.OFF': 'خاموش',
            'messages.ERROR': 'خطا',
            'messages.FATAL': 'وخیم',
            'messages.INFO': 'اطلاعات',
            'messages.WARN': 'هشدار'
        },
        messages: { //optional for Client Side Validation
            'javax.faces.component.UIInput.REQUIRED': '{0}: خطای اعتبارسنجی: این قسمت الزامیست.',
            'javax.faces.converter.IntegerConverter.INTEGER': '{2}: \'{0}\' باید حداقل شامل یک عدد باشد.',
            'javax.faces.converter.IntegerConverter.INTEGER_detail': '{2}: \'{0}\' باید عددی بین -2147483648 و 2147483647 باشد. مثال: {1}.',
            'javax.faces.converter.DoubleConverter.DOUBLE': '{2}: \'{0}\' باید عددی متشکل از یک یا چند رقم باشد.',
            'javax.faces.converter.DoubleConverter.DOUBLE_detail': '{2}: \'{0}\' باید عددی بین 4.9E-324 و 1.7976931348623157E308 باشد. مثال: {1}.',
            'javax.faces.converter.BigDecimalConverter.DECIMAL': '{2}: \'{0}\' باید یک عدد اعشاری باشد.',
            'javax.faces.converter.BigDecimalConverter.DECIMAL_detail': '{2}: \'{0}\' باید یک عدد اعشاری متشکل از صفر یا چند رقم باشد که ممکن است یک عدد اعشار و کسری در ادامه آن باشد. مثال: {1}.',
            'javax.faces.converter.BigIntegerConverter.BIGINTEGER': '{2}: \'{0}\' باید عددی متشکل از یک یا چند رقم باشد.',
            'javax.faces.converter.BigIntegerConverter.BIGINTEGER_detail': '{2}: \'{0}\' باید عددی متشکل از یک یا چند رقم باشد. مثال: {1}.',
            'javax.faces.converter.ByteConverter.BYTE': '{2}: \'{0}\' باید عددی بین 0 تا 255 باشد.',
            'javax.faces.converter.ByteConverter.BYTE_detail': '{2}: \'{0}\' باید عددی بین 0 تا 255 باشد. مثال: {1}.',
            'javax.faces.converter.CharacterConverter.CHARACTER': '{1}: \'{0}\' باید یک کاراکتر معتبر باشد',
            'javax.faces.converter.CharacterConverter.CHARACTER_detail': '{1}: \'{0}\' باید یک کاراکتر ASCII معتبر باشد.',
            'javax.faces.converter.ShortConverter.SHORT': '{2}: \'{0}\' باید عددی متشکل از یک یا چند رقم باشد.',
            'javax.faces.converter.ShortConverter.SHORT_detail': '{2}: \'{0}\' باید عددی بین -32768 و 32767 باشد. مثال: {1}.',
            'javax.faces.converter.BooleanConverter.BOOLEAN': '{1}: \'{0}\' باید \'درست\' یا \'نادرست\' باشد.',
            'javax.faces.converter.BooleanConverter.BOOLEAN_detail': '{1}: \'{0}\' باید \'درست\' یا \'نادرست\' باشد. هر مقداری غیر از \'درست\'، \'نادرست\' فرض می‌شود.',
            'javax.faces.validator.LongRangeValidator.MAXIMUM': '{1}: خطای اعتبارسنجی: مقدار بیشتر از حداکثر مجاز \'{0}\' است.',
            'javax.faces.validator.LongRangeValidator.MINIMUM': '{1}: خطای اعتبارسنجی: مقدار کمتر از حداقل مجاز \'{0}\' است.',
            'javax.faces.validator.LongRangeValidator.NOT_IN_RANGE': '{2}: خطای اعتبارسنجی: صفت مشخص شده بین مقادیر مورد انتظار {0} و {1} نیست.',
            'javax.faces.validator.LongRangeValidator.TYPE': '{0}: خطای اعتبارسنجی: مقدار از نوع درست نیست.',
            'javax.faces.validator.DoubleRangeValidator.MAXIMUM': '{1}: خطای اعتبارسنجی: مقدار بیشتر از حداکثر مجاز \'{0}\' است.',
            'javax.faces.validator.DoubleRangeValidator.MINIMUM': '{1}: خطای اعتبارسنجی: مقدار کمتر از حداقل مجاز \'{0}\' است.',
            'javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE': '{2}: خطای اعتبارسنجی: صفت مشخص شده بین مقادیر مورد انتظار {0} و {1} نیست.',
            'javax.faces.validator.DoubleRangeValidator.TYPE': '{0}: خطای اعتبارسنجی: مقدار از نوع درست نیست.',
            'javax.faces.converter.FloatConverter.FLOAT': '{2}: \'{0}\' باید عددی متشکل از یک یا چند رقم باشد.',
            'javax.faces.converter.FloatConverter.FLOAT_detail': '{2}: \'{0}\' باید عددی بین 1.4E-45 و 3.4028235E38 باشد. مثال: {1}.',
            'javax.faces.converter.DateTimeConverter.DATE': '{2}: \'{0}\' نمی تواند به عنوان یک تاریخ تعبیر شود.',
            'javax.faces.converter.DateTimeConverter.DATE_detail': '{2}: \'{0}\' نمی تواند به عنوان یک تاریخ تعبیر شود. مثال: {1}.',
            'javax.faces.converter.DateTimeConverter.TIME': '{2}: \'{0}\' نمی تواند به عنوان یک زمان تعبیر شود.',
            'javax.faces.converter.DateTimeConverter.TIME_detail': '{2}: \'{0}\' نمی تواند به عنوان یک زمان تعبیر شود. مثال: {1}.',
            'javax.faces.converter.DateTimeConverter.DATETIME': '{2}: \'{0}\' نمی تواند به عنوان تاریخ و زمان تعبیر شود.',
            'javax.faces.converter.DateTimeConverter.DATETIME_detail': '{2}: \'{0}\' نمی تواند به عنوان تاریخ و زمان تعبیر شود. مثال: {1}.',
            'javax.faces.converter.DateTimeConverter.PATTERN_TYPE': '{1}: برای تبدیل مقدار \'{0}\' باید یک ویژگی \'pattern\' یا \'type\' مشخص شود.',
            'javax.faces.converter.NumberConverter.CURRENCY': '{2}: \'{0}\' نمی تواند به عنوان یک مقدار ارزی تعبیر شود.',
            'javax.faces.converter.NumberConverter.CURRENCY_detail': '{2}: \'{0}\' نمی تواند به عنوان یک مقدار ارزی تعبیر شود. مثال: {1}.',
            'javax.faces.converter.NumberConverter.PERCENT': '{2}: \'{0}\' نمی تواند به عنوان درصد تعبیر شود.',
            'javax.faces.converter.NumberConverter.PERCENT_detail': '{2}: \'{0}\' نمی تواند به عنوان درصد تعبیر شود. مثال: {1}.',
            'javax.faces.converter.NumberConverter.NUMBER': '{2}: \'{0}\' نمی تواند به عنوان یک عدد تعبیر شود.',
            'javax.faces.converter.NumberConverter.NUMBER_detail': '{2}: \'{0}\' نمی تواند به عنوان یک عدد تعبیر شود. مثال: {1}.',
            'javax.faces.converter.NumberConverter.PATTERN': '{2}: \'{0}\' نمی تواند به عنوان یک الگوی عددی تعبیر شود.',
            'javax.faces.converter.NumberConverter.PATTERN_detail': '{2}: \'{0}\' نمی تواند به عنوان یک الگوی عددی تعبیر شود. مثال: {1}.',
            'javax.faces.validator.LengthValidator.MINIMUM': '{1}: خطای اعتبارسنجی: طول کمتر از حداقل مجاز \'{0}\' است.',
            'javax.faces.validator.LengthValidator.MAXIMUM': '{1}: خطای اعتبارسنجی: طول بیشتر از حداکثر مجاز \'{0}\' است.',
            'javax.faces.validator.RegexValidator.PATTERN_NOT_SET': 'الگوی Regex باید تنظیم شود.',
            'javax.faces.validator.RegexValidator.PATTERN_NOT_SET_detail': 'الگوی Regex باید برای مقدار غیر خالی تنظیم شود.',
            'javax.faces.validator.RegexValidator.NOT_MATCHED': 'با الگوی Regex مطابقت ندارد.',
            'javax.faces.validator.RegexValidator.NOT_MATCHED_detail': 'با الگوی Regex \'{0}\' مطابقت ندارد.',
            'javax.faces.validator.RegexValidator.MATCH_EXCEPTION': 'خطا در regular expression.',
            'javax.faces.validator.RegexValidator.MATCH_EXCEPTION_detail': 'خطا در regular expression, \'{0}\'.',
            //optional for bean validation integration in client side validation
            'javax.faces.validator.BeanValidator.MESSAGE': '{0}',
            'javax.validation.constraints.AssertFalse.message': 'باید نادرست باشد.',
            'javax.validation.constraints.AssertTrue.message': 'باید درست باشد.',
            'javax.validation.constraints.DecimalMax.message': 'باید مساوی یا کوچکتر از {0} باشد.',
            'javax.validation.constraints.DecimalMin.message': 'باید مساوی یا بزرگتر از {0} باشد.',
            'javax.validation.constraints.Digits.message': 'مقدار عددی خارج از بازه است (&lt;{0} رقم&gt;.&lt;{1} رقم&gt;).',
            'javax.validation.constraints.Future.message': 'باید در آینده باشد.',
            'javax.validation.constraints.Max.message': 'باید مساوی یا کوچکتر از {0} باشد.',
            'javax.validation.constraints.Min.message': 'باید مساوی یا بزرگتر از {0} باشد.',
            'javax.validation.constraints.NotNull.message': 'نباید خالی باشد.',
            'javax.validation.constraints.Null.message': 'باید خالی باشد.',
            'javax.validation.constraints.Past.message': 'باید در گذشته باشد.',
            'javax.validation.constraints.Pattern.message': 'باید با "{0}" مطابقت داشته باشد.',
            'javax.validation.constraints.Size.message': 'اندازه باید بین {0} و {1} باشد.'
        }
    });
}